 #include <string.h>                                        
     char string[] = "hello world";                             
     main()                                                     
     {                                                          
        int count,i;                                            
        int to_par[2],to_chil[2];    /* для каналов родителя и  
                                        потомка */              
        char buf[256];                                          
        pipe(to_par);                                           
        pipe(to_chil);                                          
        if (fork() == 0)                                        
        {                                                       
           /* выполнение порожденного процесса */               
           close(0); /* закрытие прежнего стандартного ввода */ 
           dup(to_chil[0]); /* дублирование дескриптора чтения  
                               из канала в позицию стандартного 
                               ввода */                         
           close(1); /* закрытие прежнего стандартного вывода */
           dup(to_par[0]);  /* дублирование дескриптора записи  
                               в канал в позицию стандартного   
                               вывода */                        
           close(to_par[1]); /* закрытие ненужных дескрипторов канала */ 
           close(to_chil[0]); 
           close(to_par[0]);                                    
           close(to_chil[1]);                                   
           for (;;)                                             
           {                                                    
              if ((count = read(0,buf,sizeof(buf))) == 0)       
                 exit(0);                                        
              write(1,buf,count);                               
           }                                                    
        }                                                       
        /* выполнение родительского процесса */                 
        close(1);  /* перенастройка стандартного ввода-вывода */
        dup(to_chil[1]);                                        
        close(0);                                               
        dup(to_par[0]);                                         
        close(to_chil[1]);                                      
        close(to_par[0]);                                       
        close(to_chil[0]);                                      
        close(to_par[1]);                                       
        for (i = 0; i < 15; i++)                                
        {                                                       
           write(1,string,strlen(string));                      
           read(0,buf,sizeof(buf));                             
        }                                                       
     } 
